package com.flying.flyingchessgame.controller;

import com.flying.flyingchessgame.entity.User;
import com.flying.flyingchessgame.security.service.UserDetailsImpl;
import com.flying.flyingchessgame.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;

/**
 * 用户控制器
 * <p>
 * 处理用户相关的请求，包括获取用户信息等。
 * 需要用户认证才能访问。
 * </p>
 * 
 * @author flying-chess
 * @version 1.0
 */
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api/user")
public class UserController {
    
    private static final Logger logger = LoggerFactory.getLogger(UserController.class);
    
    /**
     * 用户服务
     */
    @Autowired
    private UserService userService;
    
    /**
     * 获取当前登录用户的信息
     * <p>
     * 从安全上下文中获取当前认证用户，并返回用户信息。
     * 需要用户认证才能访问。
     * </p>
     *
     * @return 当前用户信息
     */
    @GetMapping("/me")
    @PreAuthorize("isAuthenticated()")
    public ResponseEntity<?> getCurrentUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal();
        
        logger.debug("获取当前用户信息: {}", userDetails.getUsername());
        
        User user = userService.getUserById(userDetails.getId());
        
        // 移除敏感信息
        user.setPassword(null);
        
        return ResponseEntity.ok(user);
    }
    
    /**
     * 根据ID获取用户信息
     * <p>
     * 根据提供的用户ID查询用户信息。
     * 需要用户认证才能访问。
     * </p>
     *
     * @param id 用户ID
     * @return 用户信息
     */
    @GetMapping("/{id}")
    @PreAuthorize("isAuthenticated()")
    public ResponseEntity<?> getUserById(@PathVariable Long id) {
        logger.debug("根据ID获取用户信息: {}", id);
        
        User user = userService.getUserById(id);
        if (user == null) {
            logger.warn("用户不存在: {}", id);
            return ResponseEntity.notFound().build();
        }
        
        // 移除敏感信息
        user.setPassword(null);
        
        return ResponseEntity.ok(user);
    }
} 